/**
  ******************************************************************************
  * @file    processlocker.h
  * @author  Dragon.Chen
  * @version V1.0.0
  * @date    04-27-2018
  * @brief   进程锁
  * @project linuxclient
  ******************************************************************************
  *
  * <h2><center>&copy; COPYRIGHT 2018 上海今中网络科技有限公司 </center></h2>
  ******************************************************************************
  */

#ifndef __LOCKER__H__
#define __LOCKER__H__

//#include "basement.h"
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

#include <assert.h>
#include <sys/sem.h>
#include <sys/stat.h>

/**
  * @brief  信号量初始化
  * @param  argv1:path argv2:id
  * @retval 成功返回信号量标识符，失败返回-1
  */
int sem_process_init(const char *path, int id);

/**
  * @brief  等待信号量
  * @param  NULL
  * @retval void
  */
static inline void sem_process_wait(int semid)
{
    struct sembuf sbf;
    sbf.sem_num = 0;
    sbf.sem_op = -1;
    sbf.sem_flg = SEM_UNDO;
    semop(semid, &sbf, 1);
}

/**
  * @brief  释放信号量
  * @param  NULL
  * @retval void
  */
static inline void sem_process_post(int semid)
{
    struct sembuf sbf;
    sbf.sem_num = 0;
    sbf.sem_op =  1;                                 //信号量加1
    sbf.sem_flg = SEM_UNDO;
    semop(semid, &sbf, 1);
}

/**
  * @brief  删除信号量
  * @param  NULL
  * @retval void
  */
void sem_process_delete(int semid);

#endif

/******************* (C) COPYRIGHT 2018 上海今中网络科技有限公司 *****END OF FILE****/



